import getopt, os, sys

from 规范 import 按规范检查, 按规范修订


def 显示(所有问题):
    个数 = 0
    统计 = {}
    for 文件 in 所有问题:
        if 所有问题[文件]:
            按行显示 = '\n'.join(list(map(str, 所有问题[文件])))
            print(f'问题文件：{文件}\n{按行显示}\n')
            个数 += len(所有问题[文件])
            for 问题 in 所有问题[文件]:
                if 问题.类型 in 统计:
                    统计[问题.类型] += 1
                else:
                    统计[问题.类型] = 1
    if 个数 == 0:
        print("格式无误")
    else:
        print(f"总计 {个数} 个问题：")
        for 类型 in 统计:
            print(f"{类型}：{统计[类型]} 个")


def 遍历目录(文档路径, 修订=False):
    所有问题 = {}
    for 路径, 目录名, 所有文件 in os.walk(文档路径):
        for 文件 in 所有文件:
            if not 路径.startswith(文档路径 + '/第'):
                continue
            文件路径 = os.path.join(路径, 文件)
            with open(文件路径, 'r', encoding='utf-8') as f:
                内容 = f.read()
            所有问题[文件路径] = 按规范检查(内容)

            if 修订 and len(所有问题[文件路径]) > 0:
                with open(文件路径, 'w', encoding='utf-8') as f:
                    f.write(按规范修订(内容))
                    print("已修订：" + 文件路径)
    显示(所有问题)



def 处理所有():
    if len(sys.argv) == 1:
        sys.exit("请指定文档根目录")
    else:
        文档路径 = sys.argv[-1]
    try:
        选项, 参数 = getopt.getopt(sys.argv[1:], '修', ['修订'])
    except getopt.GetoptError as e:
        sys.stderr.write('仅支持 -修\n')

    修订 = False
    for 某项, 值 in 选项:
        print(某项)
        if 某项 in ('-修', '--修订'):
            修订 = True

    遍历目录(文档路径, 修订)


处理所有()
